package cn.zqy.demo2.day03.demo01;

import java.util.LinkedList;

/**
 *
 *  java.util.LinkedList集合 implements List接口
 *     LinkedList集合的特点:
 *         1.底层是一个链表结构:查询慢,增删快 【异步的，多线程】
 *         2.里边包含了大量操作首尾元素的方法
 *         注意:使用LinkedList集合特有的方法,不能使用多态
 *
 *         - public void addFirst(E e):将指定元素插入此列表的开头。
 *         - public void addLast(E e):将指定元素添加到此列表的结尾。
 *         - public void push(E e):将元素推入此列表所表示的堆栈。
 *
 *         - public E getFirst():返回此列表的第一个元素。
 *         - public E getLast():返回此列表的最后一个元素。
 *
 *         - public E removeFirst():移除并返回此列表的第一个元素。
 *         - public E removeLast():移除并返回此列表的最后一个元素。
 *         - public E pop():从此列表所表示的堆栈处弹出一个元素。
 *
 *         - public boolean isEmpty()：如果列表不包含元素，则返回true。
 * */
public class Demo02LinkedList {
    public static void main(String[] args) {
        addList();
        System.out.println("=============");
        getList();
        System.out.println("=============");
        deleteEle();
    }



    // 1.添加方法
    public static void addList(){
        LinkedList<String> li = new LinkedList<>();
        li.add("a");
        li.add("b");
        li.add("c");
        li.add("d");
        System.out.println(li);
        li.addFirst("www");
        System.out.println(li);
        // 此方法等效于 add()
        li.addLast("com");
        System.out.println(li);

        // 注意【push】等效于addFirst,【不是在后面添加，而是在前】
        li.push("Dns");
        System.out.println(li);
    }

    // 2.查询方法
    public static void getList(){
        LinkedList<String> li = new LinkedList<>();
        li.add("a");
        li.add("b");
        li.add("c");
        li.add("d");
        System.out.println(li);
        // 返回此列表的第一个元素
        String first = li.getFirst();
        System.out.println(first);

        // 返回此列表的最后一个元素。
        String last = li.getLast();
        System.out.println(last);

        // 索引查询
        String i = li.get(2);
        System.out.println(i);
    }

    // 3.删除方法【有值才能移除，否则报错】
    private static void deleteEle() {
        LinkedList<String> li = new LinkedList<>();
        li.add("a");
        li.add("b");
        li.add("c");
        li.add("d");
        System.out.println(li);


        // 移除并返回此列表的第一个元素。
        String li1 = li.removeFirst();
        System.out.println(li1);
        System.out.println(li);

        // 移除并返回此列表的最后一个元素。
        String li2 = li.removeLast();
        System.out.println(li2);
        System.out.println(li);

        //从此列表所表示的堆栈处弹出一个元素。pop
        String li3 = li.pop();
        System.out.println(li3);
        System.out.println(li);
    }
}
